// pages/songDetail/songDetail.js
import PubSub from 'pubsub-js'
import request from "../../utils/request"
import moment from 'moment'
import regeneratorRuntime  from '../../utils/runtime'

const appInstance = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay:false, //播放状态
    song:{}, //歌曲详情
    musicId:'',//音乐ID
    musicLink:'',//存放连接
    currentTime:'00:00', //歌曲播放时间
    durantionTime:'00:00', //歌曲总时间
    currentWidth:0, //进度条长度

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let musicId = options.musicId;
    this.setData({
      musicId
    })
    // 判断当前页面音乐是否播放
    if (appInstance.globalData.isMusicPlay && appInstance.globalData.musicId === musicId) {
      this.setData({
        isPlay:true
      })
    }
    // 获取音乐详情
    this.getMusicInfo(musicId);
    this.backgroundAudioManager = wx.getBackgroundAudioManager();
    //监视音乐播放、暂停、停止
    this.backgroundAudioManager.onPlay(()=> {
      this.changePlayState(true);
      appInstance.globalData.musicId = musicId;
    });
    this.backgroundAudioManager.onPause(()=> {
      this.changePlayState(false);
      
    });
    this.backgroundAudioManager.onStop(()=> {
      this.changePlayState(false);
      
    });
    // 监听音乐播放自然结束
    this.backgroundAudioManager.onEnded(()=> {
      PubSub.publish('switchType' , 'next')
      this.setData({
        currentWidth:0,
        currentTime:'00:00'
      })
      // 自动切歌+播放
      
    });
    // 监听音乐实时播放时间
    this.backgroundAudioManager.onTimeUpdate(() => {
      let currentTime = moment(this.backgroundAudioManager.currentTime * 1000).format('mm:ss');
      // 监听进度条
      let currentWidth = (this.backgroundAudioManager.currentTime/this.backgroundAudioManager.duration) * 450;
      this.setData({
        currentTime,
        currentWidth
      })
    })
    
    
  },
  // 修改播放音乐状态的功能函数
  changePlayState(isPlay){
    this.setData({
      isPlay
    })
    // 修改全局音乐播放状态
    appInstance.globalData.isMusicPlay = isPlay;
  },
  onPlay(){
    let isPlay = !this.data.isPlay;
    // this.setData({
    //   isPlay
    // })
    let {musicId,musicLink} = this.data
    this.musicControl(isPlay,musicId,musicLink);
  },
  // 控制音乐播放/暂停的功能
async  musicControl(isPlay,musicId,musicLink){
  
    if (isPlay) {
      if (!musicLink) {
        let musicLinkData = await request('/song/url',{id:musicId});
        musicLink = musicLinkData.data[0].url;
        this.setData({
          musicLink
        })
      }
      // 
      //播放音乐
     
      this.backgroundAudioManager.src = musicLink;
      this.backgroundAudioManager.title = this.data.song.name;
    }else{
      // 暂停音乐
      this.backgroundAudioManager.pause();
    }

  },
  // 获取音乐详情的功能回调
async getMusicInfo(musicId){
    let songData = await request("/song/detail" , {ids:musicId});
    // 格式化时间格式传入歌曲总时间
    let durantionTime = moment(songData.songs[0].dt).format('mm:ss');
    this.setData({
      song:songData.songs[0],
      durantionTime
    })
    // 动态修改窗口标题
  wx.setNavigationBarTitle({
    title: this.data.song.name,
  })
  },
  // 点击切歌的回调
  handleSwitch (even){
    let type = even.currentTarget.id;
    // 关闭当前播放音乐
    this.backgroundAudioManager.stop();

    // 订阅来自recommendSong
    PubSub.subscribe('musicId', (msg,musicId) => {
      // console.log(musicId);
      // 获取音乐详情更新数据
      this.getMusicInfo(musicId)
      // 自动播放当前音乐
      this.musicControl(true,musicId)
      // 取消订阅
      PubSub.unsubscribe('musicId')
    })
    // 发布消息
    PubSub.publish('switchType' , type)
  },
  
  

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})